#--
# Proyecto Único (Etapa 2)
# Analizador Sintáctico
# 
# Autores:
# (Grupo R07)
# César Hernández (06-39724)
# Daniel Valera (07-41725)
# 
# Versión: 0.1
#++
# = Sym.rb
# Archivo que contiene la clase Sym y las siguientes subclases de la misma: 
# SymFunction y SymVariable.

require "SymTable"
require "AST"

# = Clase Sym
# Clase compuesta por:
# <b><ATRIBUTO></b>:: <DESCRIPCIÓN>
class Sym
  attr_reader :id, :type
  
  # Inicializador de la clase.
  # <i>id</i>:: Identificador asociado al símbolo.
  # <i>type</i>:: Tipo asociado al símbolo.
  def initialize(id, type)
    @id   = id
    @type = type
  end
end

# = Subclase SymFunction
# Subclase compuesta por:
# <b><ATRIBUTO></b>:: <DESCRIPCIÓN>
class SymFunction < Sym
  # Inicializador de la clase.
  # <i>id</i>:: Identificador de la función.
  # <i>type</i>:: Tipo de la función.
  def initialize(id, type)
    super(id, type)
  end
  
  # Método que devuelve una representación en cadena de caracteres del símbolo.
  def to_s
  "#{@id} of type #{@type}\n"
  end
end

# = Subclase SymVariable
# Subclase compuesta por:
# <b><ATRIBUTO></b>:: <DESCRIPCIÓN>
class SymVariable < Sym
  # Inicializador de la clase.
  # <i>id</i>:: Identificador de la variable.
  # <i>type</i>:: Tipo de la variable.
  def initialize(id, type)
    super(id, type)
  end
  
  # Método que devuelve una representación en cadena de caracteres del símbolo.
  def to_s
  "#{@id} : #{@type}\n"
  end
end
